/*
 * @author Pablo Rodríguez Fernández
 */

package poker;

import java.util.Vector;
import java.io.Serializable;
import prop.Carta;

public class Mano implements Serializable {

    protected int numCartasMax;
    protected Vector<Carta> cartas;
    public enum Estado {JUGANDO,RETIRADO};
    protected Estado estado;

    /* Crea una Mano sin un número máximo de cartas.*/
    public Mano() {
        numCartasMax = 0;
        cartas = new Vector<Carta>();
    }

    /* Crea una Mano con un número máximo de cartas numMax. */
    public Mano(int numMax) {
        cartas = new Vector<Carta>(numMax);
        numCartasMax = numMax;
    }

    public int getNumCartasMax() {
        return numCartasMax;
    }

    public int getNumCartas() {
        return cartas.size();
    }

    /* Retorna falso si ya se tiene el número máximo de Cartas, en otro caso
        añade la Carta c a la mano. */
    public boolean anadirCarta(Carta c) {
        if (cartas.size() < numCartasMax || numCartasMax == 0) cartas.add(c);
        else return false;
        return true;
    }
    
    /* Pre: La Carta c se encuentra en la mano.
        Elimina la carta C y la retorna. */
    public Carta quitarCarta(Carta c) {
        if (!cartas.contains(c)) {
            int i = indexOf(c);
            if (i >= 0) c = cartas.get(i);
        }
        cartas.remove(c);
        return c;
    }

    /* Retorna un vector de Carta. */
    public Vector<Carta> getVector() {
        return cartas;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado e) {
        estado = e;
    }

    /* Borra las cartas presentes en la mano. */
    public void borrarMano() {
        cartas.clear();
    }

    /* Función asbtracta. */
    public int evaluar() {
        return 0;
    }
    
    /* Función abstracta */
    public Vector<Carta> ordenar() {
        return cartas;
    }
    
    /* Retorna la posición donde se encuentra la carta c; en caso de que no
        exista retorna -1 */
    protected int indexOf(Carta c) {
        Carta.Palos p1 = c.getPalo();

        for (int i = 0; i < cartas.size(); i++) {
            /* Si el tienen el mismo palo y el mismo número o son comodines,
                son iguales */
            
            if ((cartas.get(i).getNum() == c.getNum()
                || p1 == Carta.Palos.COMODIN)
                && cartas.get(i).getPalo() == p1) return i;
        }
        return -1;
    }
};
